namespace Wayloop.Fusion.Core.Objects
{
    public class Task : FusionObject<int>
    {
        protected Project project;
        protected ProjectRelease projectRelease;
        protected ProjectVersion projectVersion;
        protected TaskType type;
        protected User openedBy;
        protected User assignedTo;
        protected TaskPriority priority;
        protected TaskStatus status;
        protected TaskResolution resolution;
        protected string summary;
        protected string description;

        public virtual Project Project
        {
            get { return project; }
            set { project = value; }
        }

        public virtual ProjectRelease ProjectRelease
        {
            get { return projectRelease; }
            set { projectRelease = value; }
        }

        public virtual ProjectVersion ProjectVersion
        {
            get { return projectVersion; }
            set { projectVersion = value; }
        }

        public virtual TaskType Type
        {
            get { return type; }
            set { type = value; }
        }

        public virtual User OpenedBy
        {
            get { return openedBy; }
            set { openedBy = value; }
        }

        public virtual User AssignedTo
        {
            get { return assignedTo; }
            set { assignedTo = value; }
        }

        public virtual TaskStatus Status
        {
            get { return status; }
            set { status = value; }
        }

        public virtual TaskResolution Resolution
        {
            get { return resolution; }
            set { resolution = value; }
        }

        public virtual TaskPriority Priority
        {
            get { return priority; }
            set { priority = value; }
        }

        public virtual string Summary
        {
            get { return summary; }
            set { summary = value; }
        }

        public virtual string Description
        {
            get { return description; }
            set { description = value; }
        }


        public override int GetHashCode()
        {
            return GetHashCode(
                Project,
                ProjectRelease,
                ProjectVersion,
                Type,
                OpenedBy,
                AssignedTo,
                Status,
                Resolution,
                Priority,
                Summary,
                Description);
        }
    }
}